package jwt

import (
	"cloud-storage/model/mysql"
	"cloud-storage/model/redis"
	"errors"
	_redis "github.com/go-redis/redis/v8"
	"go.uber.org/zap"
)

// SetToken 将token加入到缓存中去
func SetToken(token string, claims CustomClaims) error {
	//查看缓存中是否有token
	if jwtStr, err := redis.GetRedisJwt(claims.Phone); err == _redis.Nil {
		//没有token，将token加入到缓存中去
		if err = redis.SetRedisJwt(token, claims.Phone); err != nil {
			zap.L().Error("function redis.SetRedisJwt() Filed", zap.Any("err", err.Error()))
			return errors.New("function redis.SetRedisJwt() Filed, err:" + err.Error())
		}
		return nil
	} else if err != nil {
		zap.L().Error("function redis.GetRedisJwt() Filed", zap.Any("err", err.Error()))
		return errors.New("function redis.GetRedisJwt() Filed, err:" + err.Error())
	} else {
		//缓存中有token，将token进行拉黑
		var blackJWT mysql.JwtBlackList
		blackJWT.Token = jwtStr
		if err = mysql.JsonInBlackList(blackJWT); err != nil {
			zap.L().Error("function mysql.JsonInBlackList() Filed", zap.Any("err", err.Error()))
			return errors.New("function mysql.JsonInBlackList() Filed, err:" + err.Error())
		}
		//将新的token加入到缓存中去
		if err = redis.SetRedisJwt(token, claims.Phone); err != nil {
			zap.L().Error("function redis.SetRedisJwt() Filed", zap.Any("err", err.Error()))
			return errors.New("function redis.SetRedisJwt() Filed, err:" + err.Error())
		}
		return nil
	}
}
